草庐IT

AtCoder Beginner Contest 262 题解

全部标签

UVA12174 Shuffle的播放记录 Shuffle 题解

题目传送门从题目中我们可以看出,这道题显然是用滑动窗口来完成的。是的,滑动窗口!而且这个滑动窗口比较容易维护,因为它窗口的大小"基本"固定,(因为还需要考虑不完整的段),只需使用一个变量来标记,而且所有的数都是从1~s的整数,因此,只需用一个数组便可以保存每个数在窗口中出现的次数。在用一个b数组来记录不合法(窗口中含有相同的歌),在最后再用s减去不合法的个数就行了。代码如下:#includeusingnamespacestd;inta[1000100],tmp[1000100],b[1000100];intmain(){intn,m,s;cin>>m;while(m--){cin>>s>>n;

「题解报告」P3167 [CQOI2014]通配符匹配

「题解报告」P3167[CQOI2014]通配符匹配思路*和?显然无法直接匹配,但是可以发现「通配符个数不超过\(10\)」,那么我们可以考虑分段匹配。我们首先把原字符串分成多个以一个通配符开头的字符串,如将happy*birthday?xingchen分成:happy*birthday?xingchen然后设原串有\(m\)个通配符,\(op_i\)表示分出来的第\(i\)个串前的通配符(\(0\)没有,\(1\)是?,\(2\)是*),\(len_i\)表示分出来的第\(i\)个串的长度,\(f_{i,j}\)表示分出来的第\(i\)个串的结尾能否匹配上当前查询的字符串的位置\(j\)。则

「题解报告」P3167 [CQOI2014]通配符匹配

「题解报告」P3167[CQOI2014]通配符匹配思路*和?显然无法直接匹配,但是可以发现「通配符个数不超过\(10\)」,那么我们可以考虑分段匹配。我们首先把原字符串分成多个以一个通配符开头的字符串,如将happy*birthday?xingchen分成:happy*birthday?xingchen然后设原串有\(m\)个通配符,\(op_i\)表示分出来的第\(i\)个串前的通配符(\(0\)没有,\(1\)是?,\(2\)是*),\(len_i\)表示分出来的第\(i\)个串的长度,\(f_{i,j}\)表示分出来的第\(i\)个串的结尾能否匹配上当前查询的字符串的位置\(j\)。则

攻防世界 new_easypwn 题解

攻防世界new_easypwn题解程序分析查看程序基本情况,如图,该程序是64位程序,开启了Canary、NX、PIE保护。使用ida64打开分析程序,该程序是个电话录之类的,可以添加、删除、查看、修改通讯录。在查看函数这里发现存在字符串格式化漏洞,如图红框中标注所示。其中图中地址unk_2020E0+32*v1为用户输入的电话号码内容,如图(添加功能程序)标注出来的部分。其中下图中的dword_2020BC与上图中的v1都是索引(0,1,2,3),只是后者为用户输入选择的索引,前者为程序记录的电话录计数器。unk_2020E0为通讯记录存储基址,phone信息存储在对应记录起始地址处,大小为

攻防世界 new_easypwn 题解

攻防世界new_easypwn题解程序分析查看程序基本情况,如图,该程序是64位程序,开启了Canary、NX、PIE保护。使用ida64打开分析程序,该程序是个电话录之类的,可以添加、删除、查看、修改通讯录。在查看函数这里发现存在字符串格式化漏洞,如图红框中标注所示。其中图中地址unk_2020E0+32*v1为用户输入的电话号码内容,如图(添加功能程序)标注出来的部分。其中下图中的dword_2020BC与上图中的v1都是索引(0,1,2,3),只是后者为用户输入选择的索引,前者为程序记录的电话录计数器。unk_2020E0为通讯记录存储基址,phone信息存储在对应记录起始地址处,大小为

攻防世界 pwn1 题解

攻防世界pwn1题解下载附件,file命令识别文件为64位,checksec命令查看程序保护情况,如图,有Canary和NX保护。在ida64中打开程序,程序的主要功能有两个:存储用户输入的字符串内容打印用户输入的字符串内容特别的注意到,字符串数组大小为136(0x88),而read运行的最大输入大小为0x100,如图中红色框标注,因此可能存在栈溢出。同时puts可以将输入打出,因此可以想到借此泄露出canary值。在汇编程序40091C地址处,可以看到canary值保存在rbp上8字节处(即紧邻rbp)。GCC的canary,x86_64下从fs:0x28偏移处获取,32位下从gs:0x14

攻防世界 pwn1 题解

攻防世界pwn1题解下载附件,file命令识别文件为64位,checksec命令查看程序保护情况,如图,有Canary和NX保护。在ida64中打开程序,程序的主要功能有两个:存储用户输入的字符串内容打印用户输入的字符串内容特别的注意到,字符串数组大小为136(0x88),而read运行的最大输入大小为0x100,如图中红色框标注,因此可能存在栈溢出。同时puts可以将输入打出,因此可以想到借此泄露出canary值。在汇编程序40091C地址处,可以看到canary值保存在rbp上8字节处(即紧邻rbp)。GCC的canary,x86_64下从fs:0x28偏移处获取,32位下从gs:0x14

YACS 两数之积 题解

link 分别考虑原数组$a[]$中所有的正数,负数以及0的数量:设$a[]$中正数的数量为$cnt1$个,把$a[]$中所有正数保存在$bz[]$数组中,负数数量为$cnt2$个,保存在$bf[]$数组中,0的数量为$cnt0$个。----------------------------------设$x1$,$x0$,$x2$分别为两两相乘之后新生成的$b$序列中所有正数,0,负数的个数,则:$$x1=cnt1*(cnt1-1)/2+cnt2*(cnt2-1)/2$$$$x0=cnt0*(n-1)$$$$x2=cnt1*cnt2$$-----------------------------

YACS 两数之积 题解

link 分别考虑原数组$a[]$中所有的正数,负数以及0的数量:设$a[]$中正数的数量为$cnt1$个,把$a[]$中所有正数保存在$bz[]$数组中,负数数量为$cnt2$个,保存在$bf[]$数组中,0的数量为$cnt0$个。----------------------------------设$x1$,$x0$,$x2$分别为两两相乘之后新生成的$b$序列中所有正数,0,负数的个数,则:$$x1=cnt1*(cnt1-1)/2+cnt2*(cnt2-1)/2$$$$x0=cnt0*(n-1)$$$$x2=cnt1*cnt2$$-----------------------------

AtCoder Beginner Contest 262 题解

AtCoderBeginnerContest262A-WorldCup题解:循环判断即可#includeusingnamespacestd;voidsolve(){intn;cin>>n;for(inti=n;;i++){if(i%4==2){coutB-Triangle(Easier)题意:给定\(n\)点,\(m\)条边,如果\(a,b,c\)相连,那么\(ans++\),求\(ans\)题解:观察到\(n\)\(\le\)\(100\)可以直接暴力循环判断,然后直接搞#includeusingnamespacestd;constdoublePI=acos(-1.0);typedefpai